package middlewares

import (
	"gin_gorm_oj/helper"       // 导入辅助工具包
	"github.com/gin-gonic/gin" // 导入gin框架
	"log"                      // 导入日志包
	"net/http"                 // 导入HTTP包
)

// AuthUserCheck 管理员权限验证中间件
// 返回一个Gin中间件函数，用于验证请求是否来自管理员用户
func AuthUserCheck() gin.HandlerFunc {
	return func(c *gin.Context) {
		// 1. 从请求头中获取Token（注意：根据实际请求使用"Token"头而不是"Authorization"）
		token := c.GetHeader("authorization")

		// 2. 检查Token是否为空
		if token == "" {
			// Token为空时返回未授权错误
			c.JSON(http.StatusOK, gin.H{
				"code":    http.StatusUnauthorized,
				"message": "Token为空，请先登录",
			})
			c.Abort() // 终止后续处理
			return
		}

		// 3. 解析Token获取用户信息
		userClaim, err := helper.AnalyseToken(token)
		if err != nil {
			// 记录Token解析错误日志
			log.Printf("Token解析失败: %v", err)
			// 返回Token无效错误
			c.JSON(http.StatusOK, gin.H{
				"code":    http.StatusUnauthorized,
				"message": "Token无效或已过期",
			})
			c.Abort() // 终止后续处理
			return
		}

		// 4. 验证通过，将用户信息存储到上下文中，方便后续处理函数使用
		c.Set("user_claim", userClaim)

		// 5. 继续执行后续中间件和路由处理函数
		c.Next()
	}
}
